System and method of disaggregated tiered cache for cloud content storage

ABSTRACT

A content provider system includes: a repository to store a catalog of content; a storage device pool to load content from among the catalog of content from the repository into one or more storage devices of the storage device pool; a first hosted device communicably connected to the storage device pool, and to execute the content stored in the storage device pool to provide the content to a first user device; a second hosted device communicably connected to the storage device pool, and to execute the content stored in the storage device pool to provide the content to a second user device; and one or more processing circuits to identify an available storage device from among the one or more storage devices of the storage device pool for serving a requested content to a requesting device from among the first and second hosted devices.

CROSS-REFERENCE TO RELATED APPLICATION(S)

This application claims priority to and the benefit of U.S. Provisional Application No. 63/056,474, filed on Jul. 24, 2020, entitled “DISAGGREGATED TIERED CACHE FOR CLOUD GAME,” the entire content of which is incorporated by reference herein.

FIELD

Aspects of one or more example embodiments of the present disclosure relate to a disaggregated tiered cache, and more particularly, to a system and method of disaggregated tiered cache for cloud content storage.

BACKGROUND

As information technology society evolves, an increased amount of data is being stored and served remotely, for example, from data centers, cloud storage systems, and/or the like. For example, data centers, cloud storage systems, and/or the like may generally include a network of compute resources and storage resources. The compute resources may process data stored in the storage resources to provide the processed data to a user. However, due to data processing resource limitations, efficient use of the storage resources may be limited.

The above information disclosed in this Background section is for enhancement of understanding of the background of the present disclosure, and therefore, it may contain information that does not constitute prior art.

SUMMARY

One or more example embodiments of the present disclosure are directed to a cloud content storage system, and a method for dissegregated tiered cache sharing thereof.

According to one or more example embodiments of the present disclosure, a content provider system includes: a repository configured to store a catalog of content; a storage device pool configured to load content from among the catalog of content from the repository into one or more storage devices of the storage device pool; a first hosted device communicably connected to the storage device pool, and configured to execute the content stored in the storage device pool to provide the content to a first user device; a second hosted device communicably connected to the storage device pool, and configured to execute the content stored in the storage device pool to provide the content to a second user device; and one or more processing circuits configured to identify an available storage device from among the one or more storage devices of the storage device pool for serving a requested content to a requesting device from among the first and second hosted devices.

In an embodiment, the first and second hosted devices may be configured to communicate using Peripheral Component Interconnect Express (PCIe).

In an embodiment, the first and second hosted devices may be connected to the storage device pool by a network interface card (NIC) or a PCIe bus.

In an embodiment, the one or more storage devices of the storage device pool may include one or more shared namespaces associated with the content stored in the one or more storage devices, and including partition information and a logical unit number (LUN) corresponding to the content stored in the one or more storage devices.

In an embodiment, the one or more processing circuits may be configured to: receive a request for the requested content from at least one of the first and second devices; identify a first storage device from among the storage device pool having the requested content stored in the one or more shared namespaces thereof; and determine an available bandwidth of the first storage device for serving the requested content to the requesting device.

In an embodiment, the one or more processing circuits may be configured to: determine that the available bandwidth of the first storage device is less than a threshold bandwidth; and identify a second storage device from among the storage device pool for serving the requested content to the requesting device.

In an embodiment, the one or more processing circuits may be configured to: determine that the requested content is not stored in the one or more shared namespaces of the second storage device; determine that the second storage device has an available namespace with enough space to store the requested content; determine that an available bandwidth of the second storage device is greater than the threshold bandwidth; and load the requested content from the repository to the available namespace of the second storage device.

In an embodiment, the one or more processing circuits may be configured to: identify an inactive content stored in the available namespace of the second storage device; determine that the available namespace has enough space by removing the inactive content; and remove the inactive content from the available namespace to provide the space for the requested content.

In an embodiment, the requesting device may include a local file system, and the one or more processing circuits may be configured to provide a mount location of the requested content to the local file system of the requesting device.

According to one or more example embodiments of the present disclosure, a method for a content provider system including a repository storing a catalog of content; a storage device pool storing at least some content from among the catalog of content; a first hosted device communicably connected to the storage device pool to execute the content stored in the storage device pool; and a second hosted device communicably connected to the storage device pool to execute the content stored in the storage device pool, includes: receiving, by one or more processors, a request for a requested content from a requesting device from among the first and second hosted devices; and identifying, by the one or more processors, an available storage device from among the storage device pool for serving the requested content to the requesting device.

In an embodiment, the first and second hosted devices may communicate using Peripheral Component Interconnect Express (PCIe).

In an embodiment, the first and second hosted devices may be connected to the storage device pool by a network interface card (NIC) or a PCIe bus.

In an embodiment, one or more storage devices of the storage device pool may include one or more shared namespaces associated with the content stored in the storage device pool, and including partition information and a logical unit number (LUN) corresponding to the content stored in the storage device pool.

In an embodiment, the method may further include: identifying, by the one or more processors, a first storage device from among the storage device pool having the requested content stored in the one or more shared namespaces thereof; and determining, by the one or more processors, an available bandwidth of the first storage device for serving the requested content to the requesting device.

In an embodiment, the method may further include: determining, by the one or more processors, that the available bandwidth of the first storage device is less than a threshold bandwidth; and identifying, by the one or more processors, a second storage device from among the storage device pool for serving the requested content to the requesting device.

In an embodiment, the method may further include: determining, by the one or more processors, that the requested content is not stored in the one or more shared namespaces of the second storage device; determining, by the one or more processors, that the second storage device has an available namespace with enough space to store the requested content; determining, by the one or more processors, that an available bandwidth of the second storage device is greater than the threshold bandwidth; and loading, by the one or more processors, the requested content from the repository to the available namespace of the second storage device.

In an embodiment, the method may further include: identifying, by the one or more processors, an inactive content stored in the available namespace of the second storage device; determining, by the one or more processors, that the available namespace has enough space by removing the inactive content; and removing, by the one or more processors, the inactive content from the available namespace to provide the space for the requested content.

In an embodiment, the requesting device may include a local file system, and the method may further include: providing, by the one or more processors, a mount location of the requested content to the local file system of the requesting device.

According to one or more example embodiments of the present disclosure, a system includes: a repository configured to store a catalog of content; a storage device pool configured to load content from among the catalog of content from the repository into one or more storage devices of the storage device pool; a first hosted device configured to communicate with the storage device pool using a Peripheral Component Interconnect Express (PCIe) interface for accessing the content stored in the storage device pool, and to execute the content to stream the content to a first user device; a second hosted device configured to communicate with the storage device pool using the PCIe interface for accessing the content stored in the storage device pool, and to execute the content stored in the storage device pool to stream the content to a second user device; a network interface card or a PCIe bus configured to communicably connect the storage device pool to the first and second hosted devices; and one or more processing circuits configured to: receive a request for a requested content from a requesting device from among the first and second hosted devices; identify an available storage device from among the storage device pool for serving the requested content to the requesting device; and provide a mount location of the requested content to a local file system of the requesting device for executing the requested content.

In an embodiment, the one or more processing circuits may be configured to: identify a first storage device from among the storage device pool storing the requested content; determine an available bandwidth of the first storage device for serving the requested content to the requesting device; determine that the available bandwidth of the first storage device is less than a threshold bandwidth; identify a second storage device from among the storage device pool for serving the requested content to the requesting device; load the requested content from the repository to the second storage device; and provide the mount location of the requested content stored in the second storage device to the local file system of the requesting device.

BRIEF DESCRIPTION OF THE DRAWINGS

The above and other aspects and features of the present disclosure will become more apparent to those skilled in the art from the following detailed description of the example embodiments with reference to the accompanying drawings.

FIG. 1 illustrates a block diagram of a content provider system, according to one or more example embodiments of the present disclosure.

FIG. 2 illustrates a block diagram of a content provider platform, according to one or more example embodiments of the present disclosure.

FIG. 3 illustrates a block diagram of a storage manager, according to one or more example embodiments of the present disclosure.

FIG. 4 illustrates a block diagram of a storage device configuration, according to one or more example embodiments of the present disclosure.

FIGS. 5A-5D are flow diagrams of a method for disaggregated tiered cache sharing, according to one or more example embodiments of the present disclosure.

DETAILED DESCRIPTION

Hereinafter, example embodiments will be described in more detail with reference to the accompanying drawings, in which like reference numbers refer to like elements throughout. The present disclosure, however, may be embodied in various different forms, and should not be construed as being limited to only the illustrated embodiments herein. Rather, these embodiments are provided as examples so that this disclosure will be thorough and complete, and will fully convey the aspects and features of the present disclosure to those skilled in the art. Accordingly, processes, elements, and techniques that are not necessary to those having ordinary skill in the art for a complete understanding of the aspects and features of the present disclosure may not be described. Unless otherwise noted, like reference numerals denote like elements throughout the attached drawings and the written description, and thus, descriptions thereof may not be repeated.

Generally, cloud gaming services for console-based gaming platforms enable users of such console-based gaming platforms to remotely run and play games that are stored in the cloud. For example, these cloud gaming services may host multiple physical console devices in a rack server, such that each of the hosted devices loads, executes, and streams a game directly to a user's personal device. In other words, each of the physical console devices hosted by the rack server may load a game stored in the cloud, may locally execute the game, and may stream the game directly to a user's personal device to enable the user to play the game remotely without having to directly download the game (e.g., an entirety of the game or a portion of the game) on the user's personal device.

For example, each hosted device may correspond to a physical console device of the console-based gaming platform, such that each of the hosted devices may have a local processor, for example, such as a central processing unit (e.g., a CPU), a graphics processing unit (e.g., a GPU), or an application processing unit (e.g., an APU), which may correspond to a combination of a CPU/GPU, and a local storage resource, for example, such as a Solid State Drive (SSD). In this case, a requested game may be directly loaded in the local storage resource from a repository of games (e.g., from a cloud storage) as needed. However, the local processor of each hosted device may become saturated, for example, during game play, such that the local storage resource of each hosted device may be underutilized, even when the local storage resource has bandwidth and/or capacity, for example, to serve other users. Accordingly, while utilization of the local processor of each hosted device may be maximized, for example, by hosting multiple users on each hosted device, the local storage resource thereof may still be underutilized, as utilization of the local storage resource may be limited by saturation of the local processor thereof.

According to one or more example embodiments of the present disclosure, rather than using a local storage device as the primary storage resource of the hosted device, a disaggregated tiered cache may be provided such that a storage device pool including a plurality of storage devices may be shared by a plurality of hosted devices, for example, such that the storage device pool may serve a plurality of hosted devices concurrently (e.g., simultaneously or at the same time). For example, game requests by the hosted devices may be distributed to suitable ones of the storage devices in the storage device pool, such that the requested games may be efficiently served by the storage device pool. In this case, a suitable one of the storage devices having the requested game stored thereon from among the storage device pool may be assigned to serve the requested game to a requesting hosted device, or the requesting game may be loaded from a repository into a suitable one of the storage devices from among the storage device pool to serve the requested game to the requesting hosted device. Thus, the local storage resource of each of the hosted devices may be used as a local cache, for example, to store popular games of the corresponding hosted device or to temporarily store games for active users of the corresponding hosted device in case that the shared storage cannot serve the games due to space and/or bandwidth limitations, or may be omitted as needed or desired. Accordingly, utilization of the storage resources may be improved.

FIG. 1 illustrates a block diagram of a content provider system, according to one or more example embodiments of the present disclosure.

Referring to FIG. 1, a content provider system 100 may include a content provider platform 102 and one or more user devices 104 to 106. The one or more user devices 104 to 106 may access the content provider platform 102 over a communication network (e.g., wide area network (WAN), a local area network (LAN), the Internet, a cellular network, and/or the like) 108 to access content served by the content provider platform 102. For example, in some embodiments, the content provider platform 102 may provide video content, game content, and/or the like, which may be streamed by the one or more user devices 104 to 106 over the communication network 108. Hereinafter, for convenience, the content provider system 100 may be described in the context of a cloud gaming service for a console-based gaming platform such that the content provider platform corresponds to a cloud gaming provider platform, but the present disclosure is not limited thereto, and in various embodiments, the content provider system 100 may provide any suitable kinds of content to a user device, for example, such as video streaming content, audio streaming content, data searching content, and/or the like.

Each of the one or more user devices 104 to 106 may correspond to a suitable computing device to enable a user of the user device (e.g., 104 or 106) to receive (e.g., to stream) content (e.g., game content) from the content provider platform 102, and to provide control signals to the content provider platform 102 to control the content (e.g., to control in-game content). For example, in some embodiments, each of the one or more user devices 104 to 106 may include a console device corresponding to a console-based gaming platform associated with the content provider platform 102, but the present disclosure is not limited thereto. For example, each of the user devices 104 to 106 may include any suitable computing device having at least a thin-shell application or an emulator application installed thereon to receive and control the content served by the content provider platform 102, for example, such as a mobile phone, a smart phone, a tablet, a personal computer PC, a laptop computer, a smart wearable device, and/or the like. In other examples, each of the user devices 104 to 106 may include a smart television, a media streaming device, a media streaming dongle, and/or the like to enable the user to stream media served by the content provider platform 102. In some embodiments, each of the user devices 104 to 106 may communicate with the content provider platform 102 over the communication network 108 to enable a user thereof to remotely select, load, and/or execute (e.g., run) a game stored at the content provider platform 102.

FIG. 2 illustrates a block diagram of a content provider platform, according to one or more example embodiments of the present disclosure.

Referring to FIG. 2, in one or more example embodiments of the present disclosure, the content provider platform 102 may include a game server 202, cloud storage 204, and a storage device pool 206. The game server 202 may include one or more rack servers 208, and one or more processing circuits 232. Each of the one or more rack servers 208 may include a plurality of device boards 210 to 216. Each of the device boards 210 to 216 may correspond to a device board of a console device, such that each of the device boards 210 to 216 may execute (e.g., may run) a game of the console device. For example, in some embodiments, each of the device boards 210 to 216 may include a processing circuit (e.g., a CPU, a GPU, an APU, and/or the like) 218, an operating system 220 of the console device, a local file system 222, and local storage (e.g., a local storage device, for example, such as an SSD) 224. While FIG. 2 illustrates that a rack server 208 includes 4 or more device boards 210 to 216, the present disclosure is not limited thereto, and the rack server 208 may include any suitable number of device boards, for example, such as 8 or more device boards.

In one or more example embodiments of the present disclosure, each of the device boards 210 to 216 of the one or more rack servers 208 may share the same storage device pool 206. For example, the device boards 210 to 216 of the rack server 208 may be communicably connected to the storage device pool 206 via a network interface controller (NIC) 230 or a bus (e.g., a Peripheral Component Interconnect Express (PCIe) bus) to write to and/or to read from the one or more storage devices 236 to 243 of the storage device pool 206. For example, in some embodiments, each of the device boards 210 to 216 may be connected to a processing circuit 232 of the game server 202 via a suitable storage interface 234, and the processing circuit 232 of the game server 202 may be communicably connected to the storage device pool 206 via the NIC 230 or the bus (e.g., the PCIe bus).

The storage interface 234 may facilitate communications (e.g., using a connector and a protocol) between the device boards 210 to 216 and the storage device pool 206 (e.g., via the NIC 230). In some embodiments, the storage interface 234 may facilitate the exchange of storage requests and responses between the device boards 210 to 216 and the storage device pool 206 (e.g., via the NIC 230 or the PCIe bus). In some embodiments, the storage interface 234 may facilitate data transfers by the storage device pool 206 to and from the device boards 210 to 216 (e.g., via the NIC 230). For example, in some embodiments, the device boards 210 to 216 may exchange storage requests and responses with the processing circuit 232 via the storage interface 234, and the processing circuit 232 may translate the storage requests and responses from a first protocol (e.g., a protocol of the storage interface 234) to a second protocol (e.g., an application programming interface (API) and/or the like) associated with the NIC 230 and/or from the second protocol to the first protocol, to facilitate communications between the device boards 210 to 216 and the storage device pool 206.

In an embodiment, the storage interface 234 (e.g., the connector and the protocol thereof) may include (or may conform to) Peripheral Component Interconnect Express (PCIe), and/or the like. However, the present disclosure is not limited thereto, and in other embodiments, the storage interface 234 (e.g., the connector and protocol thereof) may conform to other suitable storage interfaces, for example, such as Small Computer System Interface (SCSI), Serial Attached SCSI (SAS), remote direct memory access (RDMA) over Ethernet, Serial Advanced Technology Attachment (SATA), Fiber Channel, Non Volatile Memory Express (NVMe), NVMe over Fabric (NVMe-oF), and/or the like. In other embodiments, the storage interface 234 (e.g., the connector and the protocol thereof) may include (or may conform to) various general-purpose interfaces, for example, such as Ethernet, Universal Serial Bus (USB), and/or the like. For convenience, the storage interface 234 may be described hereinafter in the context of a PCIe interface, but the present disclosure is not limited thereto.

While the storage device pool 206 is shown in FIG. 2 as being external to the game server 202 and communicably connected to the game server 202 via the NIC 230, the present disclosure is not limited thereto. For example, in other embodiments, the storage device pool 206 as shown in FIG. 2 may be external to the game server 202 and communicably connected to the game server 202 via a PCIe bus. In another example, in other embodiments, the storage pool 206 may be implemented as internal storage of the game server 202 with appropriate modifications to the interfaces (e.g., the storage interface 234, the NIC 230, and/or the like) thereof. Further, but the present disclosure is not limited thereto, and each of the shared namespaces 402 may have any suitable number of namespaces and any suitable number of streams per namespace depending on resources thereof (e.g., storage device interface such as PCIe Gen3/4/5, the bandwidth requirements of games, a capacity, a resize function, and/or the like).

While FIG. 4 shows that each of the device boards 210 to 216 of a corresponding game server connected to the storage device pool 206, the present disclosure is not limited thereto, and each of the device boards 210 to 216 may correspond to any suitable disk, storage media, or server implementation, for example, such as a redundant array of independent disks (RAID), a blade, a rack, and/or the like.

The catalog manager 308 may use (e.g., may monitor or may access) each of the shared namespaces 402 to determine various states of a game being loaded on the corresponding storage device. For example, the catalog manager 308 may monitor for updates to the shared namespaces 402 (e.g., by the data coordinator 312) to determine whether a game being loaded therein has completed loading. However, the present disclosure is not limited thereto, and in other embodiments, the catalog manager 308 may receive a notification (e.g., from the data coordinator 312) when any of the shared namespaces 402 are updated.

The storage scheduler 310 may determine a suitable storage device from among the storage device pool 206 that may serve a requested game to the requesting device board. In some embodiments, the storage scheduler 310 may identify one or more storage devices from among the storage device pool 206 that may serve the requested game without loading the game from cloud storage 204. For example, the storage scheduler 310 may identify one or more storage devices from among the storage device pool 206 that currently has the requested game loaded in the shared namespace 402 thereof. In some embodiments, the storage scheduler 310 may identify a suitable one from among the one or more storage devices having the requested game stored thereon to serve the requested game to the requesting device board based on metrics. For example, in some embodiments, the storage scheduler 310 may determine whether any of the one or more storage devices that currently has the requested game loaded therein has enough bandwidth to serve the requested game to the requesting device board. In some embodiments, if more than one storage device from among the storage device pool 206 has the requested game currently stored therein and enough bandwidth to serve the requested game, the storage scheduler 310 may select a suitable one of the storage devices currently storing the game based on a comparison of available bandwidths thereof such that the load may be distributed across the storage devices.

In some embodiments, the storage scheduler 310 may determine that none of the storage devices 236 to 242 from among the storage device pool 206 has the requested game stored thereon. In this case, the storage scheduler 310 may select a suitable one of the storage devices 236 to 242 for loading the requested game from the cloud storage 204 into a namespace 402 thereof based on various metrics, such that the selected storage device may serve the requested game to the requesting device board. For example, in some embodiments, a storage device from among the storage device pool 206 may load a requested game when the storage device does not have the requested game currently loaded therein (e.g., does not have the requested game loaded in any of the namespaces 402 thereof), the storage device has enough space for the requested game, and the aggregate bandwidth of active games (e.g., games currently being served by or streamed from the storage device) including the requested game is less than the bandwidth (e.g., the available bandwidth or the total available bandwidth) of the storage device.

The data coordinator 312 may configure the storage devices 236 to 242 of the storage device pool 206, and may control writing (e.g., loading) to and reading from the storage device pool 206. For example, when the storage scheduler 310 determines that a requested game should be loaded into an available namespace 402 of a suitable storage device from among the storage device pool 206, the data coordinator 312 may read the requested game (e.g., the requested game title) from the cloud storage 204, and may load (e.g., may write) the requested game to the suitable storage device of the storage device pool 206. In some embodiments, the data coordinator 312 may update local file system of each of the device boards 210 to 216 to ensure that the local file system 222 of each of the device boards 210 to 216 has the latest updates (e.g., the updates to the namespaces 402) of the storage devices 236 to 242. Accordingly, in some embodiments, rather than using a distributed file system, for example, such as a digital file system, and/or the like, which may increase latency, complexity, and costs, the data coordinator 312 may remount the namespaces 402 to the local file system 222 of each of the device boards 210 to 216 as needed or desired (e.g., when there is an update to any of the namespaces 402 of the storage devices 236 to 242).

FIGS. 5A-5D are flow diagrams of a method for disaggregated tiered cache sharing, according to one or more example embodiments of the present disclosure.

However, the present disclosure is not limited to the sequence or number of the operations of the method 500 shown in FIGS. 5A-5D, and can be altered into any desired sequence or number of operations as recognized by a person having ordinary skill in the art. For example, in some embodiments, the order may vary, or the method may include fewer or additional operations. Further, the operations shown in the method 500 may be performed by any suitable one of the components or any suitable combination of the components of those of one or more example embodiments described above.

Referring to FIG. 5A, the method 500 starts, and a selection of a game is received from a user device associated with a device board (e.g., a device board) at block 502. For example, in some embodiments, the user may use a user device (e.g., 104 or 106) to communicate with one of the device boards 210 to 216 to select a game from the catalog of games served by the content provider platform 102. A location of the game is requested at block 504. For example, the device board may request a location of the game to the catalog manager 308, and the method 500 may continue at block 516, which will be described in more detail below with reference to FIG. 5B.

Still referring to FIG. 5A, a determination is made whether a valid location is received at block 506. For example, in some embodiments, the device board may determine whether a valid location is received from the catalog manager 308 at block 506, and if not (e.g., NO at 506), then whether a load complete notification is returned from the catalog manager 308 at block 508. For example, in some embodiments, at block 506, the device board may determine whether the catalog manager 308 returns a game location and timestamp (e.g., see block 520 in FIG. 5B), and at block 508, the device board may determine whether the catalog manager 308 returns a load complete notification with the game location and timestamp (e.g., see block 540 in FIG. 5B). If not (e.g., NO at 508), the device board may continue to wait until the load complete notification is received at block 508.

On the other hand, if the device board receives the location and timestamp (e.g., YES at either 506 or 508), a determination may be made whether the device board's local file system 222 is available at block 510. For example, in some embodiments, the device board may request the data coordinator 312 to check whether the device board's local file system 222 has the updated game location at block 510, and the method 500 may continue at block 544, which will be described in more detail below with reference to FIG. 5C.

Still referring to FIG. 5A, a determination may be made whether the game is available on the local file system at block 512. For example, in some embodiments, the device board may wait for a notification indicating that its local file system 222 has been updated (e.g., see block 552 in FIG. 5C). If the notification has not been received (e.g., NO at block 512), the device board may continue to wait for its local file system 222 to be mounted (e.g., see block 546 in FIG. 5C) or remounted (e.g., see block 550 in FIG. 5C). On the other hand, if the notification is received (e.g., YES at block 512), the device board may load the game into internal memory thereof via its local file system 222 to run (e.g., to execute) the game at block 514, and the method 500 may end.

Referring to FIG. 5B, when the device board requests the location of the game to the catalog manager 308 at block 504, the method 500 may continue as shown in FIG. 5B, such that a suitable storage device for serving the game may be requested at block 516. For example, in some embodiments, the catalog manager 308 may communicate with the storage scheduler 310 to determine a suitable storage device from among the storage device pool 206 that can serve the requested game, and the method 500 may continue at block 554, which will be described in more detail below with reference to FIG. 5D. A determination may be made whether the serving storage device information is received at block 518. For example, in some embodiments, the catalog manager 308 may determine whether the storage scheduler 310 returns storage device information for a suitable storage device that can serve the game (e.g., see block 558 in FIG. 5D) without having to load the game from the repository (e.g., the cloud storage 204). If so (e.g., YES at block 518), the catalog manager 308 may return the game location and timestamp at block 520 and the method 500 may continue at block 506 in FIG. 5A such that the device board requests the local file system availability at block 510.

On the other hand, if the serving storage device information is not received (e.g., NO at block 518), a determination may be made whether caching storage device information is received at block 522. For example, in some embodiments, the catalog manager 308 may determine whether the storage scheduler 310 returns the caching storage device information for a suitable storage device that can load (e.g., that can store) the requested game from the repository (e.g., the cloud storage 204) for serving the requested game (e.g., see block 564 in FIG. 5D).

If not (e.g., NO at block 522), a determination made be made whether the requesting device board has a local storage 224 at block 523. For example, the catalog manager 308 may check if the requesting device board has the local storage 224. If so (e.g., YES at block 523), the requested game may be directly loaded from the repository to the local storage device 224 of the requesting device board at block 525. For example, the catalog manager 308 may load the game from the cloud storage 204 directly into the local storage 224 of the requesting device board (e.g., with the data coordinator 312), and in this case, may bypass the storage device pool 206. Otherwise (e.g., NO at block 523), the method may loop back to block 516, such that the user may need to wait until a suitable storage device is available.

On the other hand, if the caching storage device information is received (e.g., YES at block 522), a status of the game may be changed to loading at block 524, the user may be registered for load completion notification at block 526, and loading of the game may be initiated at block 528. For example, in some embodiments, the catalog manager 308 may inform the data coordinator 312 to load the game from the cloud storage 204 to the available storage device according to the caching storage device information received from the storage scheduler 310. In this case, the data coordinator 312 may read the game from the cloud storage 204 to load the game into the available storage device (e.g., an available namespace of the available storage device), and a wait message may be returned at block 530. For example, because no valid location has been received at block 506 (e.g., see FIG. 5A), the device board may continue to wait at block 508 for the load complete notification, and the method 500 may continue at operation 532 to determine whether the game has been successfully loaded.

A determination may be made whether the game is successfully loaded at block 532. For example, in some embodiments, the data coordinator 312 may notify the catalog manager 308 that the loading of the game is complete when it finishes the reading of the game from the cloud storage 204. If not (e.g., NO at block 532), the catalog manager 308 may continue to wait for the update at block 532. On the other hand, if the game has been successfully loaded (e.g., YES at block 532), the status of the game may be changed to “cached” at block 534, and a determination may be made whether any users are waiting for the loading to be complete at block 536. For example, in some embodiments, the catalog manager 308 may determine whether the user who requested the game to be loaded is still online, and/or whether there are any pending wait messages for users waiting for the game to be loaded.

If not (e.g., NO at block 536), an error state may occur at block 538, and the method 500 may end. On the other hand, if there are users waiting for the loading to be complete at block 536, a notification (e.g., a load complete notification) with the game location and timestamp may be returned at block 540, and the method may continue at operation 510 (e.g., see FIG. 5A). For example, in some embodiments, the catalog manager 308 may send the notification to the requesting device board, and the device board may request local file system availability for the loaded game at block 510.

Referring to FIG. 5C, when the device board requests the local file system availability for the loaded game at block 510, the method 500 may continue as shown in FIG. 5C, such that a determination may be made whether the game location (e.g., namespace, partition, LUN, and/or the like) is mounted to the local file system 222 of the requesting device board at block 544. For example, in some embodiments, the data coordinator 312 may communicate with the FS coordinator of the local file system 222 associated with the device board to determine whether the local file system 222 has the updated namespace information corresponding to the loaded game. In this case, because each of the device boards (e.g., device boards) may have its own local file system 222, and may each load games to the any of the storage devices 236 to 242 of the storage device pool 206 at any time, when an update to the storage device pool 206 is made by one of the device boards, the other device boards may be unaware of the update as its local file system 222 may have stale namespace information. Accordingly, in some embodiments, the data coordinator 312 (e.g., via the FS coordinator) may mount or may remount the updated namespace information corresponding to the loaded game to the local file system 222.

For example, in some embodiments, if the game location (e.g., namespace, partition, LUN, and/or the like) is not mounted to the local file system 222 (e.g., NO at block 544), the game location may be mounted to the local file system 222 at block 546, and a notification may be returned that the local file system 222 is available at block 552. For example, in some embodiments, the data coordinator 312 may communicate with the catalog manager 308 to determine whether the local file system 222 has the current game location, and if not (e.g., NO at operation 544), the data coordinator 312 may mount the namespace (e.g., partition and LUN) corresponding to the game location to the local file system 222.

On the other hand, if the game location is already mounted on the local file system (e.g., YES at block 544), a determination may be made whether the mount point of the game location is stale at block 548. For example, because the content stored in the storage devices 236 to 242 of the storage device pool 206 may be modified by the data coordinator 312 of the device boards at any time; the game location may be changed, and the game location mounted on the local file system 222 may include stale game location information.

If the game location mounted on the local file system 222 is not stale (e.g., NO at block 548), then a notification may be returned that the local file system 222 is available at block 552, and the method may continue at block 514 (e.g., see FIG. 5A) such that the game is loaded through the local file system 222 into internal memory of the requesting device board (e.g., of a corresponding device board) to run (e.g., to execute) the game. On the other hand, if the mount point is stale (e.g., YES at block 548), the game location may be remounted to the local file system 222, and the notification may be returned such that the method 500 may continue at block 514 (e.g., see FIG. 5A).

Referring to FIG. 5D, when the catalog manager 308 requests an available storage device from among the storage device pool 206 that can serve the requested game at block 516 (e.g., see FIG. 5B), the method 500 may continue as shown in FIG. 5D, such that a determination may be made whether any of the storage devices 236 to 242 of the storage device pool 206 currently caches (e.g., currently stores) the requested game at block 554. For example, in some embodiments, the storage scheduler 310 may check the namespaces of each of the storage devices 236 to 242 to determine if any of the storage devices 236 to 242 currently has the requested game (e.g., with catalog manager 308).

If so (e.g., YES at block 554), a determination may be made whether any of the storage devices currently caching the requested game have enough bandwidth to serve the requested game at block 556. For example the storage scheduler 310 may determine whether a load amount (e.g., a number of users) currently served by a storage device currently caching the requested game is greater than or equal to a threshold load value for that storage device. If a storage device currently caching the requested game has enough bandwidth to serve the requested game to the requesting device board (e.g., YES at block 556), then the storage information for that storage device is returned at operation 558, and the method 500 may continue at operation 520 (e.g., see FIG. 5B).

On the other hand, if no storage devices 236 to 242 from among the storage device pool 206 are currently caching the requested game (e.g., NO at block 554) and/or have enough bandwidth to serve the requested game (e.g., NO at block 556), then a determination may be made whether any of the storage devices 236 to 242 are available to cache (e.g., to load) the requested game from the repository (e.g., the cloud storage 204) at block 560. For example, in some embodiments, the storage scheduler 310 may check the namespaces of each of the storage devices 236 to 242 to determine whether any of the storage devices 236 to 242 have an available namespace (e.g., a free namespace) having enough space that can cache the requested game.

If so (e.g., YES at block 560), a determination may be made whether any of the available storage devices 236 to 242 have enough bandwidth to serve the requested game at block 562. For example the storage scheduler 310 may determine whether a load amount (e.g., a number of users) currently served by an available storage device is greater than or equal to a threshold load value for that storage device. If an available storage device has enough bandwidth to serve the requested game to the requesting device board (e.g., YES at block 562), then the storage information for that available storage device is returned at block 564, and the method 500 may continue at operation 524 (e.g., see FIG. 5B), such that the requested game is loaded (e.g., saved) in the available storage device.

On the other hand, if no storage devices 236 to 242 from among the storage device pool 206 are available to cache the game (e.g., NO at block 560) and/or have enough bandwidth to serve the requested game (e.g., NO at block 562), then a determination may be made whether any of the storage devices 236 to 242 have one or more inactive games at block 566. For example, in some embodiments, the storage scheduler 310 may check the namespaces of each of the storage devices 236 to 242 to determine whether any of the storage devices 236 to 242 have a namespace caching an inactive game (e.g., a game that is not currently executing on a device board) (e.g., with the catalog manager 308). If so (e.g., YES at block 566), a determination may be made whether any of the storage devices 236 to 242 with an inactive game have enough space by evicting (e.g., by removing) the inactive game at block 568. For example, in some embodiments, the storage scheduler 310 may determine whether a size of the namespace with the inactive game is large enough to cache the requested game if the inactive game is evicted from the namespace.

If the size of the namespace is sufficient to cache the requested game (e.g., YES at block 568), a determination may be made whether the storage device with the inactive game has enough bandwidth to serve the requested game at block 570. For example the storage scheduler 310 may determine whether a load amount (e.g., a number of users) currently served by the storage device with the inactive game is greater than or equal to a threshold load value for that storage device. If the storage device has enough bandwidth to serve the requested game to the requesting device board (e.g., YES at block 570), then the inactive game is evicted (e.g., is removed) therefrom at block 574, and the storage information for that storage device is returned at block 564. In this case, the method 500 may continue at operation 524 (e.g., see FIG. 5B), such that the requested game is loaded (e.g., saved) in the identified storage device.

On the other hand, if no storage devices 236 to 242 from among the storage device pool 206 has an inactive game (e.g., NO at block 566), has enough space even when the inactive game is evicted therefrom (e.g., NO at block 568), and/or has enough bandwidth to serve the requested game (e.g., NO at block 570), then an error state may occur at block 572 and the method 500 may end, such that the requesting device board may wait until a suitable storage device become available to serve the requested game.

In the drawings, the relative sizes of elements, layers, and regions may be exaggerated and/or simplified for clarity. Spatially relative terms, such as “beneath,” “below,” “lower,” “under,” “above,” “upper,” and the like, may be used herein for ease of explanation to describe one element or feature's relationship to another element(s) or feature(s) as illustrated in the figures. It will be understood that the spatially relative terms are intended to encompass different orientations of the device in use or in operation, in addition to the orientation depicted in the figures. For example, if the device in the figures is turned over, elements described as “below” or “beneath” or “under” other elements or features would then be oriented “above” the other elements or features. Thus, the example terms “below” and “under” can encompass both an orientation of above and below. The device may be otherwise oriented (e.g., rotated 90 degrees or at other orientations) and the spatially relative descriptors used herein should be interpreted accordingly.

It will be understood that, although the terms “first,” “second,” “third,” etc., may be used herein to describe various elements, components, regions, layers and/or sections, these elements, components, regions, layers and/or sections should not be limited by these terms. These terms are used to distinguish one element, component, region, layer or section from another element, component, region, layer or section. Thus, a first element, component, region, layer or section described below could be termed a second element, component, region, layer or section, without departing from the spirit and scope of the present disclosure.

It will be understood that when an element or layer is referred to as being “on,” “connected to,” or “coupled to” another element or layer, it can be directly on, connected to, or coupled to the other element or layer, or one or more intervening elements or layers may be present. In addition, it will also be understood that when an element or layer is referred to as being “between” two elements or layers, it can be the only element or layer between the two elements or layers, or one or more intervening elements or layers may also be present.

The terminology used herein is for the purpose of describing particular embodiments and is not intended to be limiting of the present disclosure. As used herein, the singular forms “a” and “an” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises,” “comprising,” “includes,” and “including,” “has,” “have,” and “having,” when used in this specification, specify the presence of the stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. As used herein, the term “and/or” includes any and all combinations of one or more of the associated listed items. Expressions such as “at least one of,” when preceding a list of elements, modify the entire list of elements and do not modify the individual elements of the list.

As used herein, the term “substantially,” “about,” and similar terms are used as terms of approximation and not as terms of degree, and are intended to account for the inherent variations in measured or calculated values that would be recognized by those of ordinary skill in the art. Further, the use of “may” when describing embodiments of the present disclosure refers to “one or more embodiments of the present disclosure.” As used herein, the terms “use,” “using,” and “used” may be considered synonymous with the terms “utilize,” “utilizing,” and “utilized,” respectively. Also, the term “exemplary” is intended to refer to an example or illustration.

Unless otherwise defined, all terms (including technical and scientific terms) used herein have the same meaning as commonly understood by one of ordinary skill in the art to which the present disclosure belongs. It will be further understood that terms, such as those defined in commonly used dictionaries, should be interpreted as having a meaning that is consistent with their meaning in the context of the relevant art and/or the present specification, and should not be interpreted in an idealized or overly formal sense, unless expressly so defined herein.

Although some example embodiments have been described, those skilled in the art will readily appreciate that various modifications are possible in the example embodiments without departing from the spirit and scope of the present disclosure. It will be understood that descriptions of features or aspects within each embodiment should typically be considered as available for other similar features or aspects in other embodiments, unless otherwise described. Thus, as would be apparent to one of ordinary skill in the art, features, characteristics, and/or elements described in connection with a particular embodiment may be used singly or in combination with features, characteristics, and/or elements described in connection with other embodiments unless otherwise specifically indicated. Therefore, it is to be understood that the foregoing is illustrative of various example embodiments and is not to be construed as limited to the specific example embodiments disclosed herein, and that various modifications to the disclosed example embodiments, as well as other example embodiments, are intended to be included within the spirit and scope of the present disclosure as defined in the appended claims, and their equivalents. 

What is claimed is:
 1. A content provider system comprising: a repository configured to store a catalog of content; a storage device pool configured to load content from among the catalog of content from the repository into one or more storage devices of the storage device pool; a first hosted device communicably connected to the storage device pool, and configured to execute the content stored in the storage device pool to provide the content to a first user device; a second hosted device communicably connected to the storage device pool, and configured to execute the content stored in the storage device pool to provide the content to a second user device; and one or more processing circuits configured to identify an available storage device from among the one or more storage devices of the storage device pool for serving a requested content to a requesting device from among the first and second hosted devices.
 2. The system of claim 1, wherein the first and second hosted devices are configured to communicate using Peripheral Component Interconnect Express (PCIe).
 3. The system of claim 2, wherein the first and second hosted devices are connected to the storage device pool by a network interface card (NIC) or a PCIe bus.
 4. The system of claim 1, wherein the one or more storage devices of the storage device pool comprises one or more shared namespaces associated with the content stored in the one or more storage devices, and comprising partition information and a logical unit number (LUN) corresponding to the content stored in the one or more storage devices.
 5. The system of claim 4, wherein the one or more processing circuits are configured to: receive a request for the requested content from at least one of the first and second devices; identify a first storage device from among the storage device pool having the requested content stored in the one or more shared namespaces thereof; and determine an available bandwidth of the first storage device for serving the requested content to the requesting device.
 6. The system of claim 5, wherein the one or more processing circuits are configured to: determine that the available bandwidth of the first storage device is less than a threshold bandwidth; and identify a second storage device from among the storage device pool for serving the requested content to the requesting device.
 7. The system of claim 6, wherein the one or more processing circuits are configured to: determine that the requested content is not stored in the one or more shared namespaces of the second storage device; determine that the second storage device has an available namespace with enough space to store the requested content; determine that an available bandwidth of the second storage device is greater than the threshold bandwidth; and load the requested content from the repository to the available namespace of the second storage device.
 8. The system of claim 7, wherein the one or more processing circuits are configured to: identify an inactive content stored in the available namespace of the second storage device; determine that the available namespace has enough space by removing the inactive content; and remove the inactive content from the available namespace to provide the space for the requested content.
 9. The system of claim 1, wherein the requesting device comprises a local file system, and the one or more processing circuits are configured to provide a mount location of the requested content to the local file system of the requesting device.
 10. A method for a content provider system comprising a repository storing a catalog of content; a storage device pool storing at least some content from among the catalog of content; a first hosted device communicably connected to the storage device pool to execute the content stored in the storage device pool; and a second hosted device communicably connected to the storage device pool to execute the content stored in the storage device pool, the method comprising: receiving, by one or more processors, a request for a requested content from a requesting device from among the first and second hosted devices; and identifying, by the one or more processors, an available storage device from among the storage device pool for serving the requested content to the requesting device.
 11. The method of claim 10, wherein the first and second hosted devices communicate using Peripheral Component Interconnect Express (PCIe).
 12. The method of claim 11, wherein the first and second hosted devices are connected to the storage device pool by a network interface card (NIC) or a PCIe bus.
 13. The method of claim 10, wherein one or more storage devices of the storage device pool comprises one or more shared namespaces associated with the content stored in the storage device pool, and comprising partition information and a logical unit number (LUN) corresponding to the content stored in the storage device pool.
 14. The method of claim 13, further comprising: identifying, by the one or more processors, a first storage device from among the storage device pool having the requested content stored in the one or more shared namespaces thereof; and determining, by the one or more processors, an available bandwidth of the first storage device for serving the requested content to the requesting device.
 15. The method of claim 14, further comprising: determining, by the one or more processors, that the available bandwidth of the first storage device is less than a threshold bandwidth; and identifying, by the one or more processors, a second storage device from among the storage device pool for serving the requested content to the requesting device.
 16. The method of claim 15, further comprising: determining, by the one or more processors, that the requested content is not stored in the one or more shared namespaces of the second storage device; determining, by the one or more processors, that the second storage device has an available namespace with enough space to store the requested content; determining, by the one or more processors, that an available bandwidth of the second storage device is greater than the threshold bandwidth; and loading, by the one or more processors, the requested content from the repository to the available namespace of the second storage device.
 17. The method of claim 16, further comprising: identifying, by the one or more processors, an inactive content stored in the available namespace of the second storage device; determining, by the one or more processors, that the available namespace has enough space by removing the inactive content; and removing, by the one or more processors, the inactive content from the available namespace to provide the space for the requested content.
 18. The method of claim 10, wherein the requesting device comprises a local file system, and the method further comprises: providing, by the one or more processors, a mount location of the requested content to the local file system of the requesting device.
 19. A system comprising: a repository configured to store a catalog of content; a storage device pool configured to load content from among the catalog of content from the repository into one or more storage devices of the storage device pool; a first hosted device configured to communicate with the storage device pool using a Peripheral Component Interconnect Express (PCIe) interface for accessing the content stored in the storage device pool, and to execute the content to stream the content to a first user device; a second hosted device configured to communicate with the storage device pool using the PCIe interface for accessing the content stored in the storage device pool, and to execute the content stored in the storage device pool to stream the content to a second user device; a network interface card or a PCIe bus configured to communicably connect the storage device pool to the first and second hosted devices; and one or more processing circuits configured to: receive a request for a requested content from a requesting device from among the first and second hosted devices; identify an available storage device from among the storage device pool for serving the requested content to the requesting device; and provide a mount location of the requested content to a local file system of the requesting device for executing the requested content.
 20. The system of claim 19, wherein the one or more processing circuits are configured to: identify a first storage device from among the storage device pool storing the requested content; determine an available bandwidth of the first storage device for serving the requested content to the requesting device; determine that the available bandwidth of the first storage device is less than a threshold bandwidth; identify a second storage device from among the storage device pool for serving the requested content to the requesting device; load the requested content from the repository to the second storage device; and provide the mount location of the requested content stored in the second storage device to the local file system of the requesting device. 